/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package logica;

import beans.IthemPublicitario;
import datos.RDMS;
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.SessionScoped;

/**
 *
 * @author Jose
 */
public class ManejadorRestaurante {
    
    /*  metodo agregado
        Autor: Jaime Delgado
        regresa una lista de restaurantes      
    */
    
    public List<Restaurante>getRestaurantes(){
        ArrayList<Restaurante> lista = new ArrayList();

        Connection c = RDMS.GetConnection();
        ResultSet r = RDMS.consulta("select codigo,nombre,descripcion_o_eslogan,latitud,longitud,ubicacion,Categoria_codigo from Restaurante", c);
        if (r != null) {
            try {
                while (r.next()) {
                    int codigo = r.getInt(1);
                    String nombre = r.getString(2);
                    String descripcion = r.getString(3);
                    double latitud = r.getDouble(4);
                    double longitud = r.getDouble(5);
                    String ubicacion=r.getString(6);
                    int categoria = r.getInt(7);
                    Restaurante res = new Restaurante();
                    res.codigo = codigo;
                    res.nombre = nombre;
                    res.descripcion = descripcion;
                    res.latitud = latitud;
                    res.longitud = longitud;
                    res.ubicacion=ubicacion;
                    res.categoria = categoria;
                    Connection c2=RDMS.GetConnection();
                    //String consulta="select puntaje from calificacion where Restaurante_codigo="+res.codigo;
                    String consulta="select AVG(puntaje) as promedio from calificacion where Restaurante_codigo="+res.codigo;
                    ResultSet r2 = RDMS.consulta(consulta, c2);
                    r2.next();
                    if (r2!=null){
                        if (r2.getRow()==1){
                            res.puntuacion= r2.getDouble(1);
                            res.puntuacionString=""+res.puntuacion;
                                    
                        }else{
                             res.puntuacion=0;
                             res.puntuacionString="Sin puntuación";
                        }                       
                    }else{                      
                        res.puntuacion=0;
                        res.puntuacionString="Sin puntuación";
                    }
                    r2.close();
                    c2.close();
                    lista.add(res);

                }
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorPublicidad.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return lista;
        
    }

    public List<Restaurante> getAllRestaurante() {
        ArrayList<Restaurante> lista = new ArrayList();

        Connection c = RDMS.GetConnection();
        ResultSet r = RDMS.consulta("select codigo,nombre,descripcion_o_eslogan,latitud,longitud,Categoria_codigo from Restaurante", c);
        if (r != null) {
            try {
                while (r.next()) {
                    int codigo = r.getInt(1);
                    String nombre = r.getString(2);
                    String descripcion = r.getString(3);
                    double latitud = r.getDouble(4);
                    double longitud = r.getDouble(5);
                    int categoria = r.getInt(6);
                    Restaurante res = new Restaurante();
                    res.codigo = codigo;
                    res.nombre = nombre;
                    res.descripcion = descripcion;
                    res.latitud = latitud;
                    res.longitud = longitud;
                    res.categoria = categoria;
                    lista.add(res);

                }
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorPublicidad.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return lista;
    }
    
     public Restaurante getRestaurante(String query) {
        Connection c = RDMS.GetConnection();
        String consulta="select codigo,nombre,descripcion_o_eslogan,latitud,longitud,Categoria_codigo from Restaurante where lower(nombre) = '"+query.toLowerCase()+"'";
        ResultSet r = RDMS.consulta(consulta, c);
        Restaurante found=null;
        if (r != null) {
            try {
                while (r.next()) {
                    int codigo = r.getInt(1);
                    String nombre = r.getString(2);
                    String descripcion = r.getString(3);
                    double latitud = r.getDouble(4);
                    double longitud = r.getDouble(5);
                    int categoria = r.getInt(6);
                    Restaurante res = new Restaurante();
                    res.codigo = codigo;
                    res.nombre = nombre;
                    res.descripcion = descripcion;
                    res.latitud = latitud;
                    res.longitud = longitud;
                    res.categoria = categoria;
                   found=res;

                }
                r.close();
                c.close();
                return found;
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorPublicidad.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return null;
    }
     
    public List<Restaurante> getRestaurantes(String query) {
        ArrayList<Restaurante> lista = new ArrayList();

        Connection c = RDMS.GetConnection();
        String consulta="select codigo,nombre,descripcion_o_eslogan,latitud,longitud,Categoria_codigo from Restaurante where lower(nombre) like '%"+query.toLowerCase()+"%'";
        ResultSet r = RDMS.consulta(consulta, c);
        if (r != null) {
            try {
                while (r.next()) {
                    int codigo = r.getInt(1);
                    String nombre = r.getString(2);
                    String descripcion = r.getString(3);
                    double latitud = r.getDouble(4);
                    double longitud = r.getDouble(5);
                    int categoria = r.getInt(6);
                    Restaurante res = new Restaurante();
                    res.codigo = codigo;
                    res.nombre = nombre;
                    res.descripcion = descripcion;
                    res.latitud = latitud;
                    res.longitud = longitud;
                    res.categoria = categoria;
                    lista.add(res);

                }
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorPublicidad.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return lista;
    }
    
    public List<MenuRest> getAllMenus(int codigo){
        ArrayList<MenuRest> lista = new ArrayList();

        Connection c = RDMS.GetConnection();
        ResultSet r = RDMS.consulta("select titulo,descripcion,precio,imagen from menu where Restaurante_codigo="+codigo, c);
        if (r != null) {
            try {
                while (r.next()) {
                    String titulo = r.getString(1);
                    String descripcion = r.getString(2);
                    float precio = r.getFloat(3);
                    String imagen = r.getString(4);
                    
                    MenuRest menu = new MenuRest();
                    menu.titulo = titulo;
                    menu.descripcion = descripcion;
                    menu.precio = precio;
                    menu.imagen = imagen;
                    lista.add(menu);
                }
                
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorRestaurante.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return lista;
    }
    
    public List<MenuRest> getAllPromociones(int codigo){
        ArrayList<MenuRest> lista = new ArrayList();

        Connection c = RDMS.GetConnection();
        ResultSet r = RDMS.consulta("select titulo,descripcion,precio,imagen from promocion where Restaurante_codigo="+codigo, c);
        if (r != null) {
            try {
                while (r.next()) {
                    String titulo = r.getString(1);
                    String descripcion = r.getString(2);
                    float precio = r.getFloat(3);
                    String imagen = r.getString(4);
                    
                    MenuRest menu = new MenuRest();
                    menu.titulo = titulo;
                    menu.descripcion = descripcion;
                    menu.precio = precio;
                    menu.imagen = imagen;
                    lista.add(menu);
                }
                
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorRestaurante.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return lista;
    }
    
    public Restaurante getRestaurante(int codigo){
        Restaurante rest = new Restaurante();

        Connection c = RDMS.GetConnection();
        ResultSet r = RDMS.consulta("select nombre,ubicacion from restaurante where codigo="+codigo, c);        
        if (r != null) {
            try {
                while (r.next()) {
                    String nombre = r.getString(1);
                    String ubicacion = r.getString(2);
                    rest.nombre = nombre;
                    rest.ubicacion = ubicacion;
                }
                
                try 
                {
                    ResultSet r2 = RDMS.consulta("select descripcion from horario where Restaurante_codigo="+codigo, c);
                    if(r2 != null){
                        rest.horarios = new ArrayList();
                        while (r2.next()) {
                            String horario = r2.getString(1);
                            rest.horarios.add(horario);
                        }
                    }
                    r2.close();
                }catch (SQLException ex) {
                    Logger.getLogger(ManejadorRestaurante.class.getName()).log(Level.SEVERE, null, ex);
                }
                r.close();
                c.close();
            } catch (SQLException ex) {
                Logger.getLogger(ManejadorRestaurante.class.getName()).log(Level.SEVERE, null, ex);
                return null;
            }

        }
        return rest;
    }
}
